// 给定 n 个整数，找出平均数最大且长度为 k 的连续子数组，并输出该最大平均数。

const findMaxAverage = function (nums: number[], k: number): number {
    let left = 0;
    let right = k
    // 初始化窗口相关数值
    let currSum = 0;
    for (let i = 0; i < k; i++) {
        currSum += nums[i];
    }
    let res = currSum / k;
    // 滑动窗口过程
    while (right < nums.length) {
        // 动态维护当前和，省去很多无用计算
        currSum -= nums[left];
        currSum += nums[right];
        res = Math.max(res, currSum / k);
        left++;
        right++;
    }
    return res;
};

findMaxAverage([1, 12, -5, -6, 50, 3], 4)

// 比较基础的一道算法题，主要考察了滑动窗口算法的应用
// 注意窗口的开闭区间的细节就好，在这里是左闭右开
// 窗口在数组的过程中滑动，在滑动的过程中，维护平均数其实是一个非常容易地事情（因为实际上是在维护动态和）
// 实质上只牵扯到一个数被移除与一个新的数加入，之后便可求解。
